import java.util.Arrays;

public class int128 {
    public static void int123() {
        Integer a = new Integer(1);

        Integer b = new Integer(1);

        System.out.println(a == b);

        System.out.println(a.equals(b));

        a = 1;

        b = 1;

        System.out.println(a == b);

        a = 128;

        b = 128;

        System.out.println(a == b);

    }


    public static void main(String[] args) {
        System.out.println("start");

        int123();
    }

//    第一个结果是false，显而易见是new了两个对象，==比较的是地址和值，a和b是两个不同的栈内存空间，下图所示：
//    第二个结果是true，因为equals比较的是两个对象的真实值，也就是堆中的1。
//    第三个结果是true，直接给ab赋值。
//    第四个结果是false，直接给ab赋值。
//    这时候问题来了，为什么同样是赋值，结果却不一样？
//    这是因为Java里面对处在在-128~127之间的Integer值，用的是原生数据类型int，会在内存里供重用，
//    也就是说这之间的Integer值进行==比较时只是进行int原生数据类型的数值比较，而超出-128~127的范围，进行==比较时是进行地址及数值比较。
}
